﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace Misuzilla.Crigate.Configuration
{
    /// <summary>
    /// 設定可能なパラメータを表すクラスです。
    /// </summary>
    public class ConfigurationPropertyInfo
    {
        /// <summary>
        /// 設定名
        /// </summary>
        public String Name { get; set; }
        /// <summary>
        /// 設定の説明
        /// </summary>
        public String Description { get; set; }
        /// <summary>
        /// 設定の型
        /// </summary>
        public Type Type { get; set; }
        /// <summary>
        /// 値を取得がプロパティまたはフィールド経由の場合はPropertyInfoまたはFieldInfoを指定します
        /// </summary>
        public MemberInfo MemberInfo { get; set; }
        /// <summary>
        /// デフォルトの値
        /// </summary>
        public Object DefaultValue { get; set; }

        /// <summary>
        /// ConfigurationPropertyInfo クラスのインスタンスを作成します。
        /// </summary>
        public ConfigurationPropertyInfo()
        {
        }
        
        /// <summary>
        /// ConfigurationPropertyInfo クラスのインスタンスを作成して指定されたパラメータで初期化します。
        /// </summary>
        /// <param name="name"></param>
        /// <param name="description"></param>
        /// <param name="type"></param>
        /// <param name="defaultValue"></param>
        /// <param name="memberInfo"></param>
        public ConfigurationPropertyInfo(String name, String description, Type type, Object defaultValue, MemberInfo memberInfo)
        {
            Name = name;
            Description = description;
            Type = type;
            DefaultValue = defaultValue;
            MemberInfo = memberInfo;
        }
    }
}
